package br.com.vertigo.sgci.session;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.persistence.NoResultException;

import org.jboss.seam.annotations.Name;
import org.jboss.seam.framework.EntityHome;

import br.com.vertigo.sgci.entity.Projetotipoitem;
import br.com.vertigo.sgci.entity.Tipoitem;

@SuppressWarnings("serial")
@Name("tipoitemHome")
public class TipoitemHome extends EntityHome<Tipoitem> {

	public void setTipoitemIdTipoitem(Long id) {
		setId(id);
	}

	public Long getTipoitemIdTipoitem() {
		return (Long) getId();
	}

	@Override
	protected Tipoitem createInstance() {
		Tipoitem tipoitem = new Tipoitem();
		return tipoitem;
	}

	public void wire() {
		getInstance();
	}

	public boolean isWired() {
		return true;
	}

	public Tipoitem getDefinedInstance() {
		return isIdDefined() ? getInstance() : null;
	}

	public List<Projetotipoitem> getProjetotipoitems() {
		return getInstance() == null ? null : new ArrayList<Projetotipoitem>(
				getInstance().getProjetotipoitems());
	}
	
	public boolean validaTipoitem(Tipoitem tipoitem){
		boolean valido = false;
		try {
			 getEntityManager().createQuery("select tipoitem from Tipoitem tipoitem where tipoitem.nome = :nome")
			.setParameter("nome", tipoitem.getNomeTransient()).getSingleResult();
		}catch(NoResultException ex) {
			valido = true;
		}
		if(tipoitem.getNome() != null){
			if(tipoitem.getNome().equals(tipoitem.getNomeTransient())){
				valido = true;
			}
		}
		return valido;
	}
	
	public String persist(){
		String resultado = "falha";
		Tipoitem tipoitem = getInstance();
		if(validaTipoitem(tipoitem) == true){
			tipoitem.setNome(tipoitem.getNomeTransient());
			setCreatedMessage("");
			getFacesMessages().add(FacesMessage.SEVERITY_INFO, Constants.MSG_SUCESS_CREATE);
			super.persist();
			resultado = "sucesso";
		}else{
			getFacesMessages().add(FacesMessage.SEVERITY_ERROR, Constants.MSG_TIPOITEM_DUP);
		}
		return resultado;
	}
	
	public String update(){
		String resultado = "falha";
		Tipoitem tipoitem = getInstance();
		if(validaTipoitem(tipoitem) == true){
			tipoitem.setNome(tipoitem.getNomeTransient());
			setUpdatedMessage("");
			getFacesMessages().add(FacesMessage.SEVERITY_INFO, Constants.MSG_SUCESS_UPDATE);
			super.update();
			resultado = "sucesso";
		}else{
			getFacesMessages().add(FacesMessage.SEVERITY_ERROR, Constants.MSG_TIPOITEM_DUP);
		}
		return resultado;
	}
	
	public String remove(){
		String resultado = "aviso";
		setDeletedMessage("");
		try{
			if((new TipoitemList()).verificaDependencias(this.getInstance())){
				getFacesMessages().add(FacesMessage.SEVERITY_ERROR, Constants.MSG_ERROR_DELETE);
				resultado = "falha";
			}else{
				super.remove();
				getFacesMessages().add(FacesMessage.SEVERITY_INFO, Constants.MSG_SUCESS_DELETE);
				resultado = "sucesso";
			}
		}catch (Exception e){
			getFacesMessages().add(FacesMessage.SEVERITY_ERROR, Constants.MSG_ERROR_DELETE);
			resultado = "falha";
		}
		return resultado;
	}

}
